package com.ys.breakdemo;

import java.util.Scanner;
import java.util.SortedMap;

/**
 * @author CodeYang
 * @Description 判断一个数 是否为素数:
 * *     素数概念:质数又称素数,是指在一个大于1的自然数中，除了1和此整数自身外，不能被其他自然数整除的数
 * *     素数就是只能被1和它本身整除的自然数。1既不是素数，也不是合数。素数如：2、3、5、13 17
 * <p>
 * *    Math.sqrt(2) 根号2======= 1.4142135623730951
 * *    // 优化版本
 * @Date 2020/12/7 15:09
 */
public class CheckPrime {

    public static void main(String[] args) {
        /*
        方案三:
        for 循环顺序法
        1: 定义一个num 变量,利用循环可以一直执行来做判断:
        2: 如果循环体顺利,执行 i的值会执行到num

        */
        Scanner input = new Scanner(System.in);
        System.out.print("请输入一个整数：");
        int num = input.nextInt();
        // b)判断num是否是质数，质数：除了1和它本身之外,不能被其他数整除的正整数称质数。
        int i = 2;
        for (; i < num; i++) {
            // 如果num能被i整除，则跳出循环即可
            if (num % i == 0) {
                break;
            }
        }
        // 判断i的值，从而确定num是否为质数
        // 以上循环正常执行完毕，则证明i的取值为num，也就意味着循环体中的“num % i == 0”从来没成立过，从而确定num就是一个质数
        if (i == num) {
            System.out.println(num + "是一个质数");
        }
        // 如果以上循环执行过程中，满足“num % i == 0”这个条件，那么就会提前结束循环，也就意味着num不是一个质数
        else {
            System.out.println(num + "不是一个质数");
        }

 /*        方案二:  标志值法变化法
        1 设置一个标志
        2 进行code 执行,是质数的话, 标志++
        3 最后判断标志量是否发生改变*/
      /*  for (int i = 2 ; i <= 100 ; i++ ) {
            int count = 0;
            for (int j = 2 ; j <=i   ;j++ ) {
                if ( i % j == 0 ){
                    break;
                }
                count++;
            }
            if (count != 0){
                System.out.println(i);
            }
        }*/



    }

    /*//1 不是质数, 2是质数,但是2一般不作为运算
    // 输出1-100之间的所有质数
    //   方案一:   假设法:
         1: 先假设 条件成立
         2: 执行代码,尝试推翻条件
         3: 判断假设是否成立,或者改变:
         注意事项: 为什么循环结束条件可以从
               < number  到 < number/2 到Math.sort(number)

    boolean bool;
        for (int i = 3; i < 100; i += 2) {
        bool = true;
        for (int j = 3; j <= Math.sqrt(i); j++) {
            if (i % j == 0) {
                bool = false;
                break;
            }
        }
        if (bool)
        {
            System.out.print(i + " ");
        }
    }
}*/

}
